﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace Financial_Assistant
{
    /// <summary>
    /// Логика взаимодействия для ChangingUsersWindow.xaml
    /// </summary>
    public partial class ChangingUsersWindow : Window
    {
        private string _connectionString =
                @"Data Source = CHRISTINABEIM\SQLEXPRESS; Initial Catalog=Financial_Assistant; Trusted_Connection=True;"; //( ip-сервера, имя БД, разрешение соединения)

        string user_ID = String.Empty;
        string user_name = String.Empty;

        public ChangingUsersWindow(string userName, string userID)
        {
            InitializeComponent();
            user_ID = userID;
            user_name = userName;
            SqlConnection connection = new SqlConnection(_connectionString);

            StringBuilder query = new StringBuilder();
            query.Append("SELECT * FROM [Имена Входа] where [ID пользователя] = '");
            query.Append(user_ID + "'");

            SqlCommand command = new SqlCommand(query.ToString(), connection);
            connection.Open(); // открыть считывание
            SqlDataReader reader = command.ExecuteReader();

            string[] results = new string[5];

            while (reader.Read())
            {
                LoginBox.Text = reader[1].ToString();
                PaswordBox.Password = reader[2].ToString();
                PassBox.Password = PaswordBox.Password;
                PassQuestions.Text = reader[3].ToString();
                PassAnswer.Text = reader[4].ToString();
            }
        }

        private void PaswordBox_PasswordChanged(object sender, RoutedEventArgs e)
        {
            if (PaswordBox.Password == String.Empty)
            {
                PassBox.Password = String.Empty;
                PassBox.IsEnabled = false;
            }
            else PassBox.IsEnabled = true;
        }

        private void OkBut_Click(object sender, RoutedEventArgs e)
        {
            bool flag = true; // ФЛАГ разрешения обновления данных об имени входа

            if (LoginBox.Text == String.Empty)
            {
                MessageBox.Show("Введите имя");
                flag = false;
            }
            else if (PaswordBox.Password != PassBox.Password)
            {
                MessageBox.Show("Введенные пароли не совпадают");
                flag = false;
            }
            else if ((PassQuestions.Text != String.Empty) && (PassAnswer.Text == String.Empty))
            {
                MessageBox.Show("Ответ на вопрос не введен");
                flag = false;
            }
            else if ((PassQuestions.Text == String.Empty) && (PassAnswer.Text != String.Empty))
            {
                MessageBox.Show("Вопрос для ответа не задан");
                flag = false;
            }
            else if (PaswordBox.Password == String.Empty)
            {
                MessageBox.Show("Пароль не задан");
                flag = false;
            }
            else if (flag)
            {
                try
                {
                    bool flag_NameChanging = true; // показывает существует ли новое веденное имя_входа в базе
                    SqlConnection connection = new SqlConnection(_connectionString);
                    StringBuilder query = new StringBuilder();
                    SqlCommand command;
                    SqlDataReader reader;

                    //если имя изменилось:
                    if (LoginBox.Text != user_name)
                    {
                        //ПРОВЕРКА НА ВВОД УЖЕ СУЩЕСТВУЮЩЕГО ИМЕНИ
                        query.Append("SELECT * FROM [Имена Входа] where Имя = '");
                        query.Append(LoginBox.Text + "'");

                        command = new SqlCommand(query.ToString(), connection);
                        connection.Open(); // открыть считывание
                        reader = command.ExecuteReader();
                        string results = String.Empty;
                        while (reader.Read())
                        {
                            for (int j = 0; j < reader.FieldCount; j++)
                            {
                                results += reader[j].ToString();
                            }
                        }
                        connection.Close();
                        reader.Dispose();
                        command.Dispose();

                        if (results != String.Empty)
                        {
                            flag_NameChanging = false;
                            connection.Dispose();
                            MessageBox.Show("Это имя уже зарегистрировано");
                        }
                    }
                    
                    if (flag_NameChanging)
                    {
                        query.Clear();
                        query.Append("UPDATE [Имена входа] SET Имя = '");
                        query.Append(LoginBox.Text + "', Пароль = '");
                        query.Append(PaswordBox.Password + "'");

                        if (PassQuestions.Text != "")
                        {
                            query.Append(", [Контрольный вопрос] = '");
                            query.Append(PassQuestions.Text);
                            query.Append("', Ответ = '");
                            query.Append(PassAnswer.Text + "' ");
                        }
                        else if (PassQuestions.Text == "")
                        {
                            query.Append(", [Контрольный вопрос] = NULL, Ответ = NULL");
                        }

                        query.Append(" WHERE ([ID пользователя] = '");
                        query.Append(user_ID);
                        query.Append("')");

                        command = new SqlCommand(query.ToString(), connection);
                        connection.Open(); // открыть считывание
                        reader = command.ExecuteReader();

                        reader.Close();
                        command.Dispose();
                        connection.Dispose();
                        MessageBox.Show("Изменения сохранены");
                        this.Close();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, "Ошибка чтения из базы данных" + Environment.NewLine + ex.Message);
                }
            }
        }

        private void CancelBut_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
    }
}
